四大排序及其时间、空间复杂度分析

您所在的位置:网站首页 排序 时间复杂度 四大排序及其时间、空间复杂度分析

四大排序及其时间、空间复杂度分析

2023-09-04 06:33| 来源: 网络整理| 查看: 265

时间复杂度

在算法的分析中,语句的执行次数T(n)是一个关于n(问题规模)的一个函数。分析n的变化引起T(n)的改变,进而得到T(n)的数量级,也就是时间频率。如果存在某一个辅助函数f(n),当n趋于无穷大时,T(n)/f(n)的值为一个不为0的常数,有T(n)=O(f(n)),这就是算法的渐进时间复杂度,也就是我们常说的时间复杂度。

大O表示法:用O(f(n))来体现时间复杂度的方法被称作大O表示法; 大O推导法: O(1)叫做常数阶;O(n)叫做线性阶;O(n^2)叫做平方阶。

用常数1取代运行时间中的所有加法常数。在修改后的运行次数函数中,只保留最高阶项。如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大O阶。

举一个简单的例子

int i; for(i=0;i for (int i = 0; i

for (int i = 1; i ; len; ++i) { if (arr[i] ; arr[i - 1]) { int temp = arr[i]; int j = i - 1; for (; j ;= 0 ;; temp ; arr[j]; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = temp; } }

}

int main() { int arr[] = { 4,5,8,9,1,2 }; int len = sizeof(arr) / sizeof(int);//通过字节计算数组大小 printArray(arr, len); InsertSort(arr, len); printArray(arr, len); return 0; }

12345678910111213141516171819202122232425262728293031323334353637383940 复杂度计算

1、当初始序列为正序时,只需要外循环n-1次,每次进行一次比较,无需移动元素。此时比较次数(C min)和移动次数(M min)达到最小值。 C min=n-1; M min=0; 此时时间复杂度为O(n). 2、初始序列为反序时,需要外循环n-1次,每次排序中待插入的元素都要和[0,i-1]中的i个元素进行比较且要将这i个元素后移i次,此时比较次数和移动次数达到最大值。 C min=1+2+3+4+……+n-1=(n-1)n/2; M min=1+2+3+……+n-1=(n-1)n/2; 此时时间复杂度为O(n^2). 3、在直接插入排序中只使用了i,j,tmp这三个辅助元素,与问题规模无关,空间复杂度为O(1)

冒泡排序 概念及思路

重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故称为"冒泡排序"。

代码实现 #include using namespace std; void BubbleSort(int *a, int size) { for (int i = 0; i if (a[j] int a[10] = { 2, 7, 34, 54, 12, 5, 19, 33, 88, 23 }; cout cout 12, 8, 6, 9, 10 }; int max = m[0]; for (int i = 0; i if (m[j] for (int j = i; j if (left > right) return ; int temp = n[left]; //temp中存的数为基准数 int i = left, j = right; int t; while (i != j) { //一定要先从右向左找 while (i = temp) j--; while (i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3